﻿// C. Tiles Comeback.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
https://codeforces.com/problemset/problem/1851/C

弗拉德记得他有一系列 n 块瓷砖和一个数字 k。瓷砖从左到右依次编号，第 i 块瓷砖的颜色是 ci。

如果你站在第一块瓷砖上，然后开始向右跳任意多块瓷砖，就可以得到一条长度为 p 的路径。

弗拉德想知道是否有可能得到一条长度为 p 的路径，以便

在索引为 n 的瓦片上结束；
p 能被 k 整除 路径被分成长度正好为 k 的块；
每个区块中的瓦片颜色相同，相邻区块的颜色不一定不同。
例如，设 n=14，k=3。

瓷砖的颜色包含在数组 c = [1,2,1,1,7,5,3,3,1,3,4,4,2,4]中。然后，我们可以构建一条长度为 6 的路径，该路径由 2 个图块组成：

C1→C3→C4→C11→C12→C14

来自第 1 个图块的所有图块的颜色都是 1，来自第 2 个图块的所有图块的颜色都是 4。

在这个例子中，也可以构建一条长度为 9 的路径，其中来自第 1 个图块的所有图块的颜色都是 1，来自第 2 个图块的所有图块的颜色都是 3，来自第 3 个图块的所有图块的颜色都是 4。

输入
第一行输入数据包含一个整数 t（1≤t≤104）--测试案例数。
测试用例说明如下。

每个测试用例的第一行包含两个整数 n 和 k（1≤k≤n≤2⋅105）--系列中的瓦片数和块的长度。

每个测试用例的第二行包含 n 个整数 c1,c2,c3,...,cn（1≤ci≤n）--瓷砖的颜色。



保证所有测试用例的 n 之和不超过 2⋅105 。

输出
对于每个测试用例，在单独一行中输出：

如果能得到满足这些条件的路径，则 “是”；
否则为 NO。
您可以在任何情况下输出 “是 ”和 “否”（例如，字符串 yEs、yes、Yes 和 YES 将被视为肯定回答）。

InputCopy
10
4 2
1 1 1 1
14 3
1 2 1 1 7 5 3 3 1 3 4 4 2 4
3 3
3 1 3
10 4
1 2 1 2 1 2 1 2 1 2
6 2
1 3 4 1 6 6
2 2
1 1
4 2
2 1 1 1
2 1
1 2
3 2
2 2 2
4 1
1 1 2 2
OutputCopy
YES
YES
NO
NO
YES
YES
NO
YES
YES
YES

注意事项
在第一个测试案例中，您可以从第一块瓷砖跳到最后一块瓷砖；

第二个测试案例已在问题陈述中说明。

*/
#include <iostream>


using namespace std;

const int N = 200010;
int a[N];
int T;
int n, k;

void solve() {
	cin >> n >> k;
	for (int i = 0; i < n; i++) cin >> a[i];
	if (k == 1 || n==1) {
		cout << "YES" << endl;
		return;
	}
	if (a[0] == a[n - 1]) {
		int cnt = 2;
		for (int i = 1; i <= n - 2; i++) {
			if (a[i] == a[0]) cnt++;
			if (cnt >= k) {
				cout << "YES" << endl;
				return;
			}
		}
		if (cnt >= k) {
			cout << "YES" << endl;
			return;
		}
	}
	else {
		int l = 0; int r = n - 1;
		int cnt = 0;
		for (l = 0; l < n; l++) {
			if (a[0] == a[l]) cnt++;
			if (cnt == k) break;
		}
		cnt = 0;
		for (r = n - 1; r > l; r--) {
			if (a[n - 1] == a[r]) cnt++;
			if (cnt == k) break;
		}
		if (r > l) {
			cout << "YES" << endl;
			return;
		}
	}

	cout << "NO" << endl;
	return;
}

int main()
{
	cin >> T;
	while (T--) {
		solve();
	}

	return 0;
}

 